import vue from '@vitejs/plugin-vue';
import { defineConfig, loadEnv } from 'vite';
import eslintPlugin from 'vite-plugin-eslint';
import stylelint from 'vite-plugin-stylelint';
import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';
import { VantResolver } from '@vant/auto-import-resolver';
import pxtovw from 'postcss-px-to-viewport-8-plugin';
import UnoCSS from 'unocss/vite';

import { join } from 'path';
function resolve(dir) {
  return join(__dirname, dir); //可以用process.cwd() path.join()和path.resolve()
}

// https://vite.dev/config/
export default defineConfig(({ command, mode }) => {
  console.log(command, mode, '00');
  const env = loadEnv(mode, process.cwd(), '');

  return {
    define: {
      __APP_ENV__: JSON.stringify(env.APP_ENV)
    },
    plugins: [
      vue(),
      UnoCSS(),
      AutoImport({
        //自动导入第三方库或组件 不需要手动编写import {xxx} from vue
        // dts: true, // 如果使用 Typescript，需要设置 dts 为 true 插件会在项目根目录生成类型文件 auto-imports.d.ts ，确保该文件在 tsconfig 中被 include
        dts: false,
        imports: ['vue', 'vue-router'],
        resolvers: [VantResolver()]
      }),
      Components({
        dts: false, // 输出文件，里面都是一些import的组件键值对
        dirs: [], //让src/components里的组件不用再手动引入
        // 配置需要自动注册的组件
        resolvers: [VantResolver()]
      }),
      // eslint插件配置
      eslintPlugin({
        include: ['src/**/*.js', 'src/**/*.vue'], // 指定需要检查的文件
        exclude: ['node_modules/**', 'dist/**'], // 指定不需要检查的文件
        fix: false, // 是否自动修复
        cache: true // 是否启用缓存
      }),
      stylelint({
        fix: false,
        include: ['src/**/*.vue', 'src/**/*.css'],
        exclude: ['node_modules/**', 'dist/**']
      })
    ],
    css: {
      devSourcemap: true,
      postcss: {
        plugins: [
          pxtovw({
            unitToConvert: 'px', // 要转化的单位
            viewportWidth: 375, // UI舌尖搞的宽度
            unitPrecision: 6, // 转换后的精度，即小数点位数
            propList: ['*'], // 指定转换的css属性，*代表全部css属性单位都进行转换
            viewportUnit: 'vw', // 指定需要转换成的视窗单位，默认 vw
            fontViewportUnit: 'vw', // 指定字体需要转换成的视窗单位，默认vw
            selectorBlackList: [], // 指定不转换的视窗单位类型
            minPixelValue: 1, // 默认值1，小于或等于1px则不进行转换
            mediaQuery: true, // 是否在媒体查询的css代码中也进行转换，默认false
            // replace: true, // 是否直接更换属性值，而不添加备用属性
            exclude: [/^(?!.*node_modules\/vant)(?!.*__uno\.css)/], // 忽略某些文件夹下的文件或特定文件，例如 node_modules 下的文件
            // include: undefined, // 如果设置了include，那将只有匹配到的文件才会被转换
            landscape: false // 是否处理横屏情况
          })
        ]
      }
    },
    resolve: {
      alias: {
        '@': resolve('/src'),
        '#': resolve('/types')
      }
    }
  };
});
